package client_gui;


import java.awt.Color;

import javax.swing.BorderFactory;
import javax.swing.JScrollPane;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;

import client_tree.ContactsTree;
import client_tree.User;


/**
 * Klasa koja predstavlja panel koji sadrzi stablo sa korisnicima. Klasa prosiruje
 * JScrollPanel klasu (komponentu), sto omogucava scrolling stabla korisnika.
 * U ovoj klasi se i kreira ContactsTree objekat, koji predstavlja stablo korisnika.
 * 
 * @author UrosKrkic & Radivoje Popovic
 */
public class ContactsPanel extends JScrollPane {
	
	/**
	 * Vlasnik komponente - glavni prozor aplikacije.
	 */
	private ClientWindow owner;

	
	/**
	 * ContactsTree objekat, koji predstavlja stablo korisnika.
	 */
	private ContactsTree tree;
	
	
	/**
	 * Border koji uokviruje panel - komponentu.
	 */
	private TitledBorder titledBorder;
	

	/**
	 * Boja panela.
	 */
	private Color panelColor = new Color(240, 248, 255);
	

	
	/**
	 * Konstruktor.
	 * @param owner - glavni prozor aplikacije
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public ContactsPanel(ClientWindow owner) {
		this.owner = owner;
		
		// kreiranje border-a
		titledBorder = BorderFactory.createTitledBorder(BorderFactory.
				createEtchedBorder(EtchedBorder.RAISED),
				"Contacts", javax.swing.border.TitledBorder.CENTER,
				javax.swing.border.TitledBorder.DEFAULT_POSITION,
				null, null);
		

		/*
		 * Kreiranje stabla, na osnovu modela podataka. Modelu podataka se pristupa
		 * preko reference na samo aplikaciju.
		 */
		tree = new ContactsTree(this.owner, this.owner.getApplicaton().getClientModel());

		
		initializeContactsPanel();
	}

	
	
	/**
	 * Metod vrsi inicijalizaciju ContactsPanel-a.
	 * @author UrosKrkic & Radivoje Popovic
	 */
	private void initializeContactsPanel() {
		// setovanje border-a
		this.setBorder(titledBorder);
		
		// setovanje boje panela
		this.setBackground(panelColor);
		
		// dodavanje ContactsTree komponente (stabla) u ovaj panel
		this.setViewportView(tree);
	}
	
	
	/**
	 * Metod vraca referencu na objekat stabla.
	 * @return - referenca na objekat stabla
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public ContactsTree getTree() {
		return this.tree;
	}
	
	
	/**
	 * Metod vraca referencu na User objekat koji je selektovan.
	 * @return - referenca na User objekat
	 * @author UrosKrkic & Radivoje Popovic
	 */
	public User getSelectedUser() {
		return this.tree.getSelectedUser();
	}

	
}
